#include "BlockQueue.c"

// 消费者
void *consumer(void *bq_)
{
    BlockQueue *bq = (BlockQueue *)bq_; // 这里是强制类型转换
    while (1)
    {
        // 消费活动
        int data;
        block_queue_push(bq, &data);
        printf("消费数据：%d\n", data);
    }
    return NULL;
}

// 生产者
void *productor(void *bq_)
{
    BlockQueue *bq = (BlockQueue *)bq_; // 这里是强制类型转换
    while (1)
    {
        // 生产活动
        int data = rand() % 10 + 1;
        block_queue_pop(bq, (void *)&data);
        printf("生产数据：%d\n", data);
    }
    return NULL;
}

int main()
{

    srand((unsigned long)time(NULL) ^ getpid());
    // 构造一个阻塞队列的结构体 , 方便让生产线程和消费线程看到同一份阻塞队列了
    BlockQueue *bq = malloc(sizeof(BlockQueue));
    bq = block_queue_create(GMAXCAP);
    pthread_t c, p; // c ---消费者  p --- 生产者
    pthread_create(&c, NULL, consumer, bq);
    pthread_create(&p, NULL, productor, bq);

    // 等待
    pthread_join(c, NULL);
    pthread_join(c, NULL);

    // 释放动态内存
    free(bq);
}